<?php

/**
 * 
 *
 * @author daniel
 */
class Buscador extends Controller {

		public function __construct() {
				parent::__construct();

				$this->load->model("buscadores/buscadores_model");
				$this->load->model("propiedades/propiedades_model");
				$this->load->model("buscadores/conversiones_monetarias_model");
		}

		function _convertir_uf_a_pesos($cantidad) {
				$result = $this->conversiones_monetarias_model->convertir_ufs_a_pesos($cantidad);
				return $result;
		}

		function _convertir_dolar_a_pesos($cantidad) {
				$result =  $this->conversiones_monetarias_model->convertir_dolares_a_pesos($cantidad);
				return $result;
		}

		/**
		*
		*/
		function buscador_principal() {
				$data = $this->buscadores_model->datos_para_buscador_simple();
				$this->load->view("buscadores/buscador_principal", $data);
		}

		/**
		*		Formulario ::: Boton Buscar ::: Buscador Principal
		*/
		function form_buscador_principal() {
				$this->load->library('form_validation');

				/*
				 * datos requeridos
				 */
				$this->form_validation->set_rules('buscador_simple_comuna', 'Comuna', 'required');
				$this->form_validation->set_rules('buscador_simple_tipo_de_propiedad', 'Tipo de propiedad', 'required');

				/*
				 * datos no requeridos
				 */
				$this->form_validation->set_rules("buscador_simple_precio_desde", "Desde", "numeric");
				$this->form_validation->set_rules("buscador_simple_precio_hasta", "Hasta", "numeric");
				$this->form_validation->set_rules("buscador_simple_tipo_valor", "Hasta", "required");

				$this->form_validation->set_message('required', 'Debe introducir el campo %s');
				$this->form_validation->set_message('numeric', 'El campo %s debe ser numerico');

				/*
				 * fix para no permitir que busquen si en el campo comuna esta
				 * la opcion "Seleccione"
				 */
				$comuna_invalida = strcmp("Seleccione", $_POST["buscador_simple_comuna"]) == 0;
				
				if (!$this->form_validation->run() || $comuna_invalida) {
						/*
						* la validacon falla
						*/
						redirect("home_principal");
						return;
				}

				$this->load->library("array_library");

				$datos_formulario = $this->array_library->preserve_matching_keys($_POST, "buscador_simple_");
				$datos_formulario = $this->array_library->replace_in_keys($datos_formulario, "buscador_simple_");

				$this->load->model("propiedades/propiedades_model");

				$datos_busqueda["comuna"] = $datos_formulario["comuna"];
				$datos_busqueda["tipo_propiedad"] = $datos_formulario["tipo_de_propiedad"];
				$datos_busqueda["tipo_tasacion"] = $datos_formulario["tipo_tasacion"];

				$tiene_precio_desde = $datos_formulario["precio_desde"];
				$tiene_precio_hasta = $datos_formulario["precio_hasta"];

				/*
				 * analisis del tipo de valor, el tipo de valor
				 * nos ayuda a saber si se refieren a UF, DOLAR o PESO
				 */
				$tipo_valor = $datos_formulario["tipo_valor"];

				if (strcmp($tipo_valor, "PESO") != 0) {

							if (strcmp($tipo_valor, "DOLAR") == 0) {

										$datos_formulario["precio_desde"] =  ws_moneda('DOLAR') * $datos_formulario["precio_desde"]; //$this->_convertir_dolar_a_pesos($datos_formulario["precio_desde"]);
										$datos_formulario["precio_hasta"] = ws_moneda('DOLAR') * $datos_formulario["precio_hasta"]; //$this->_convertir_dolar_a_pesos($datos_formulario["precio_hasta"]);

							} elseif (strcmp($tipo_valor, "UF") == 0) {

										$datos_formulario["precio_desde"] = ws_moneda('UF') * $datos_formulario["precio_desde"]; //$this->_convertir_uf_a_pesos($datos_formulario["precio_desde"]);
										$datos_formulario["precio_hasta"] = ws_moneda('UF') * $datos_formulario["precio_hasta"]; //$this->_convertir_uf_a_pesos($datos_formulario["precio_hasta"]);

							}
				}

				if ($tiene_precio_desde) {
						$datos_busqueda["tasaciones.precio * conversiones_monetarias.valor_en_pesos >="] = $datos_formulario["precio_desde"];
				}

				if ($tiene_precio_hasta) {
						$datos_busqueda["tasaciones.precio * conversiones_monetarias.valor_en_pesos <="] = $datos_formulario["precio_hasta"];
				}

				/* cargo el templator */
				$this->load->library("templator");

				/* datos necesarios para desplegar la vista */
				$viewName = "propiedades/listado_propiedades";
				$viewData["propiedades"] = $this->propiedades_model->buscar($datos_busqueda, 0); /*
																									*	el 0 esta en duro aqui pq
																									*	indica la pagina que se desea,
																									* dado que esta es la llamada
																									*	inicial, siempre es 0
																									*/

				/* guardo la ultima busqueda, para poder hacer la paginacion correctamente */
				$this->_store_last_search($datos_busqueda);

				/* configuro la paginacion, para que pueda ser desplegada correctamente */
				$this->load->library("pagination");

				$pagination_config['base_url'] = site_url("buscador/continue_last_search");
				$pagination_config['total_rows'] = $this->propiedades_model->contar($datos_busqueda);
				$pagination_config['per_page'] = $this->config->item("per_page");

				//echo nl2br(print_r($pagination_config, true));

				$this->pagination->initialize($pagination_config);

				/* cargo la template, mostrando la pagina al usuario */
				$this->templator->template_con_buscador($viewName, $viewData);
	}

	/*
	 * este metodo es invocado por el link de la paginacion
	 * se basa en la ultimo where, ejecutado por el buscador
	 * ejecutando el mismo where pero esta vez una pagina mas alla!
	 */
	public function continue_last_search($page = 0) {
		$this->load->library("pagination");
		$this->load->library("templator");

		/* recupera el ultimo where. */
		$where = $this->_get_last_search();

		/* utilizando el ultimo where, tiro la busqueda */
		$viewName = "propiedades/listado_propiedades";
		$viewData["propiedades"] = $this->propiedades_model->buscar($where, 0);

		$pagination_config['base_url'] = site_url("buscador/continue_last_search");
		$pagination_config['total_rows'] = $this->propiedades_model->contar($where);
		$pagination_config['per_page'] =  $this->config->item("per_page");

		//echo nl2br(print_r($pagination_config, true));

		$this->pagination->initialize($pagination_config);

		/* cargo la template, mostrando la pagina al usuario */
		$this->templator->template_con_buscador($viewName, $viewData);
	}

	/**
	 * esta funcion se utiliza para guardar la ultima 
	 * busqueda del usuario, esta busqueda despues se utiliza 
	 * para poder relizar la paginacion, sin necesidad de que el usuario
	 * repita los datos de la busqueda.
	 */
	private function _store_last_search($where) {
		if (empty($where)) {
			return; /* nada que hacer */
		}

		$this->load->library("session");
		$this->session->set_userdata("last_user_search", $where);
	}

	private function _get_last_search() {
		$this->load->library("session");
		return $this->session->userdata("last_user_search");
	}

	/**
	 *
	 * @return <type>
	 */
	function buscador_codigo() {

		$this->load->library('form_validation');

		$this->form_validation->set_rules("codigo_propiedad", "Codigo", "required|numeric");
		$this->form_validation->set_message('numeric', 'El campo %s debe ser numerico');
		$this->form_validation->set_message('required', 'El campo %s debe ser numerico');
		if (!$this->form_validation->run()) {
			/*
			 * la validacon falla
			 */
			$data["datos_para_buscador_simple"] = $this->buscadores_model->datos_para_buscador_simple();

			$datos_busqueda["seccion"] = "DESTACADA EN HOME";
			$data["datos_para_listado_de_propiedades"]["propiedades"] = $this->propiedades_model->buscar($datos_busqueda);

			$this->load->view('home', $data);
			//redirect('propiedades/listar_todas_todas', 'refresh');
			return;
		} else {
			$datos_busqueda["id_propiedad"] = $this->input->post('codigo_propiedad');
			$data["datos_para_buscador_simple"] = $this->buscadores_model->datos_para_buscador_simple();
			$data["datos_para_listado_de_propiedades"]["propiedades"] = $this->propiedades_model->buscar($datos_busqueda);

			$this->load->view('home', $data);
		}
	}

}
